/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JComponent;
import modelo.ModeloGrafica;
import modelo.ModeloGraficaListener;

/**
 *
 * @author juanan
 */
public class Grafica extends JComponent implements ModeloGraficaListener {

    private int y, x, r, z, relacion = 10;
    private int maximoAlimento, maximoDias, punto;
    private ModeloGrafica m = new ModeloGrafica();

    public Grafica(ModeloGrafica model) {
        m = model;
        agregarListeners();
    }

    private void agregarListeners() {
        m.addInterfazListener(this);
        this.addMouseListener(new Manejador(this));
        this.addMouseMotionListener(new Manejador(this));
    }

    @Override
    public void paintComponent(Graphics g) {
        maximoAlimento = m.getMaximoAlimento();
        maximoDias = m.getMaximoDias();
        x = (maximoAlimento - m.getAlimentoInicial()) / relacion;
        r = (maximoAlimento - m.getAlimentoMax()) / relacion;
        y = (m.getDiaAlimentoMax()) / relacion;
        z = (maximoAlimento - m.getAlimentoFinal()) / relacion;
        Graphics2D g2d = (Graphics2D) g.create();
        setOpaque(false);
        g2d.setColor(Color.RED);
        g2d.drawLine(3, x * relacion + 3, y * relacion + 3, r * relacion + 3);
        g2d.drawLine(y * relacion + 3, r * relacion + 3, 300 + 3, z * relacion + 3);
        g2d.setColor(Color.BLACK);
        g2d.drawLine(0, maximoDias * relacion + 5, maximoDias * relacion + 5, maximoDias * relacion + 5);
        g2d.drawLine(0, 0, 0, 305);
        g2d.fillOval(0, x * relacion, 7, 7);
        g2d.setColor(Color.BLUE);
        g2d.fillOval(y * relacion, r * relacion, 8, 8);
        g2d.setColor(Color.BLACK);
        g2d.fillOval(300, z * relacion, 7, 7);
        super.paintComponent(g2d);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 300);
    }

    @Override
    public void movementPerformed() {
        repaint();
    }

    private class Manejador extends MouseAdapter {

        private final Grafica c;

        public Manejador(Grafica c) {
            this.c = c;
        }

        @Override
        public void mouseDragged(MouseEvent e) {
            int a = e.getX();
            int b = e.getY();

            try {
                if (punto == 1) {
                    m.setAlimentoInicial(300 - b);
                }
                if (punto == 2) {
                    m.setAlimentoMax(300 - b);
                    m.setDiaAlimentoMax(a);
                }
                if (punto == 3) {
                    m.setAlimentoFinal(300 - b);
                }
            } catch (Exception ex) {
                System.out.println(ex);
            }


        }

        @Override
        public void mousePressed(MouseEvent e) {
            int a = e.getX();
            int b = e.getY();

            if (a < 5) {
                punto = 1;
            } else {
                if (a < 295) {
                    punto = 2;
                } else {
                    punto = 3;
                }

            }
            mouseDragged(e);
        }
    }
}
